package com.draven.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.draven.entity.Bookmark;

/**
 * 网络地址服务接口
 */
public interface BookmarkService {

    /**
     * 添加网络地址
     *
     * @param userId     用户ID
     * @param title      标题
     * @param url        URL地址
     * @param category   分类
     * @param sort       排序
     * @param isFavorite 是否收藏
     * @return ID
     */
    Long add(Long userId, String title, String url, String category, Integer sort, Integer isFavorite);

    /**
     * 修改网络地址
     *
     * @param id         ID
     * @param userId     用户ID
     * @param title      标题
     * @param url        URL地址
     * @param category   分类
     * @param sort       排序
     * @param isFavorite 是否收藏
     */
    void update(Long id, Long userId, String title, String url, String category, Integer sort, Integer isFavorite);

    /**
     * 删除网络地址
     *
     * @param id     ID
     * @param userId 用户ID
     */
    void delete(Long id, Long userId);

    /**
     * 获取网络地址详情
     *
     * @param id     ID
     * @param userId 用户ID
     * @return 网络地址信息
     */
    Bookmark getDetail(Long id, Long userId);

    /**
     * 分页查询网络地址
     *
     * @param userId     用户ID
     * @param title      标题
     * @param url        URL地址
     * @param category   分类
     * @param isFavorite 是否收藏
     * @param pageNum    页码
     * @param pageSize   每页数量
     * @return 分页结果
     */
    Page<Bookmark> page(Long userId, String title, String url, String category, Integer isFavorite, Integer pageNum, Integer pageSize);

    /**
     * 切换收藏状态
     *
     * @param id     ID
     * @param userId 用户ID
     * @return 收藏状态（0否 1是）
     */
    Integer toggleFavorite(Long id, Long userId);

    /**
     * 更新排序
     *
     * @param id     ID
     * @param userId 用户ID
     * @param sort   排序
     */
    void updateSort(Long id, Long userId, Integer sort);
    
    /**
     * 统计用户的网络地址数量
     *
     * @param userId 用户ID
     * @return 网络地址数量
     */
    int countByUserId(Long userId);
    
    /**
     * 统计用户的收藏网址数量
     *
     * @param userId 用户ID
     * @return 收藏网址数量
     */
    int countFavoriteByUserId(Long userId);
} 